/*
 * 描          述:  <描述>
 * 修  改   人:  PengQingyang
 * 修改时间:  2022年6月23日
 * <修改描述:>
 */
package com.tx.component.file.catalog;

import com.tx.component.file.resource.FCResource;
import com.tx.component.file.resource.FCResourceLoader;
import com.tx.component.file.util.FileContextUtils;
import com.tx.core.exceptions.util.AssertUtils;

/**
 * 默认的虚拟文件目录<br/>
 * <功能详细描述>
 * 
 * @author  PengQingyang
 * @version  [版本号, 2022年6月23日]
 * @see  [相关类/方法]
 * @since  [产品/模块版本]
 */
public class DefaultVitualFileCatalog implements VitualFileCatalog {
    
    /** 目录名 */
    private String catalog;
    
    /** 资源加载器 */
    private FCResourceLoader resourceLoader;
    
    /** 虚拟文件目录权限 */
    private VitualFileCatalogPermissionEnum permission;
    
    /** viewUrl处理器 */
    private ViewUrlHandler viewUrlHandler;
    
    /**
     * @return
     */
    @Override
    public String getCatalog() {
        return this.catalog;
    }
    
    /**
     * @return
     */
    @Override
    public FCResourceLoader getResourceLoader() {
        return this.resourceLoader;
    }
    
    /**
     * @return
     */
    @Override
    public VitualFileCatalogPermissionEnum getPermission() {
        if (this.permission == null) {
            return VitualFileCatalogPermissionEnum.PUBLIC_READ_WRITE;
        }
        return this.permission;
    }
    
    /**
     * @param relativePath
     * @return
     */
    @Override
    public String getViewUrl(String relativePath) {
        //根据相对路径获取对应的资源
        FCResource resource = getResourceLoader().getFCResource(relativePath);
        if (resource == null) {
            return "";
        }
        if (this.viewUrlHandler == null) {
            AssertUtils.notEmpty(relativePath, "relativePath is empty.");
            //没有公共读权限的文件，其ViewUrl为空字符串
            switch (getPermission()) {
                case PUBLIC_READ:
                case PUBLIC_READ_WRITE:
                    return FileContextUtils.defaultViewUrl(getCatalog(),
                            relativePath);
                default:
                    //如果
                    return "";
            }
        }
        return this.viewUrlHandler.getViewUrl(resource, this);
    }
    
    /**
     * @param 对resourceLoader进行赋值
     */
    public void setResourceLoader(FCResourceLoader resourceLoader) {
        this.resourceLoader = resourceLoader;
    }
    
    /**
     * @return 返回 viewUrlHandler
     */
    public ViewUrlHandler getViewUrlHandler() {
        return viewUrlHandler;
    }
    
    /**
     * @param 对viewUrlHandler进行赋值
     */
    public void setViewUrlHandler(ViewUrlHandler viewUrlHandler) {
        this.viewUrlHandler = viewUrlHandler;
    }
    
    /**
     * @param 对permission进行赋值
     */
    public void setPermission(VitualFileCatalogPermissionEnum permission) {
        this.permission = permission;
    }
    
    /**
     * @param 对catalog进行赋值
     */
    public void setCatalog(String catalog) {
        this.catalog = catalog;
    }
    
}
